package com.mkx.multitier.resource;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;

/**
 * 资源池接口，定义资源池的基本操作
 */
public interface ResourcePool<T> {
    
    /**
     * 初始化资源池
     */
    void initialize();
    
    /**
     * 从资源池中获取一个资源
     * @return 资源对象
     * @throws InterruptedException 如果等待过程中被中断
     */
    T acquire() throws InterruptedException;
    
    /**
     * 从资源池中获取一个资源，带超时限制
     * @param timeout 超时时间
     * @param unit 时间单位
     * @return 资源对象，如果超时返回null
     * @throws InterruptedException 如果等待过程中被中断
     */
    T acquire(long timeout, TimeUnit unit) throws InterruptedException;
    
    /**
     * 归还资源到资源池
     * @param resource 要归还的资源
     * @return 是否成功归还
     */
    boolean release(T resource);
    
    /**
     * 关闭资源池
     */
    void shutdown();
    
    /**
     * 获取资源池大小
     */
    int size();
    
    /**
     * 获取空闲资源数量
     */
    int availableCount();
    
    /**
     * 获取已分配资源数量
     */
    int allocatedCount();
    
    /**
     * 调整资源池大小
     * @param newSize 新的池大小
     */
    void resize(int newSize);
    
    /**
     * 检查资源是否有效
     * @param resource 要检查的资源
     */
    boolean validate(T resource);
    
    /**
     * 获取资源池名称
     */
    String getPoolName();
}
